﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Follow.Model;
using Follow.DataAccess;
using Follow.Common;

namespace Follow.Business
{
    public class FuncionalidadeBO
    {
        public IList<Funcionalidade> findAll()
        {
            FuncionalidadeDAO dao = new FuncionalidadeDAO();
            return dao.findAll();
        }

        public IList<Funcionalidade> findByDescricao(String descricao)
        {
            FuncionalidadeDAO dao = new FuncionalidadeDAO();
            return dao.findByDescricao(descricao);
        }

        public void save(Funcionalidade f, Int32 idlogin)
        {
            FuncionalidadeDAO dao = new FuncionalidadeDAO();
            if (f.IDFuncionalidade == Int32.MinValue || f.IDFuncionalidade.Equals(0))
            {
                dao.insert(f, idlogin);
            }
            else
            {
                dao.update(f, idlogin);
            }
        }

        public void delete(Int32 id, Int32 idlogin)
        {
            FuncionalidadeDAO dao = new FuncionalidadeDAO();
            validarExclusao(id);
            dao.delete(id, idlogin);
        }

        public IList<Funcionalidade> findByUser(Usuario usuario)
        {
            FuncionalidadeDAO dao = new FuncionalidadeDAO();
            return dao.findByUsuario(usuario.IDUsuario);
        }

        public Funcionalidade load(Int32 funcionalidadeId)
        {
            FuncionalidadeDAO dao = new FuncionalidadeDAO();
            return dao.findByID(funcionalidadeId);
        }


        private void validarExclusao(Int32 id)
        {
            GrupoFuncionalidadeDAO gF = new GrupoFuncionalidadeDAO();
            IList<GrupoFuncionalidade> grupofunc = gF.findByFuncionalidade(id);

            if (grupofunc != null && !(grupofunc.Count.Equals(0)))
            {
               throw new Exception("Essa funcionalidade está associada a um grupo e por isso não pode ser excluída.");
            }
        }
    }
}